دسته بندی ها
01:04 1400/03/13

دلیل خطای Unable to track an entity of type because primary key property 'id' is null

مشخصات سوال کننده :
کاربر : Kavosh     امتیاز کاربر : 0     رتبه کاربر : 7040
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4445
2 نظر
hamid_b : خب چه خطایی داره ؟ شما فقط گفتید خطا دارید ولی هیچ اشاره ای هم نمی کنید خطا چیه !!!

امتیاز کاربر : 518   رتبه کاربر : 4   تاریخ ثبت : 01:14 1400/03/13
Kavosh : سلام دیتا بیس قبلی را هم اوکی کردم باز هم خطا را دارم و ظاهرا از سمت برنامه id به سمت sql نمی ره، نمی دونم مشکل از Identity هست یا نه

امتیاز کاربر : 0   رتبه کاربر : 7040   تاریخ ثبت : 12:05 1400/03/14
هوش مصنوعی

پاسخ هوش مصنوعی

این خطا معمولاً زمانی رخ می دهد که شما سعی دارید یک موجودیت (Entity) را با یک شناسه (ID) که خالی است یا مقداردهی نشده است، در بانک اطلاعاتی ذخیره کنید. در این مورد خاص، به نظر می رسد که یک سوییچ (شاید Identity) در شناسه کاربر شما به درستی کار نمی کند.

تعدادی نکته برای بررسی وجود دارد:

  • اطمینان حاصل کنید که خاصیت 'id' در مدل شما به درستی تعریف شده است و به عنوان کلید اصلی (Primary Key) مشخص شده است.

  • بررسی کنید که آیا خاصیت 'id' به صورت خودکار (Auto-increment) مقداردهی می شود یا خیر. معمولاً این کار با استفاده از ویژگی های Entity Framework انجام می شود:

  • [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    
  • بررسی کنید که مهاجرت های جدید شما به درستی ایجاد شده اند و نقش 'id' در دیتابیس به درستی تنظیم شده است. می توانید از پنل SQL Server Management Studio (SSMS) برای بررسی ساختار جدول استفاده کنید.

  • هنگام ذخیره موجودیت جدید در دیتابیس، اطمینان حاصل کنید که شناسه (id) را به صورت دستی تنظیم نمی کنید. بگذارید EF آن را برای شما تنظیم کند.

اگر مشکلات ادامه داشت، ممکن است بخواهید که یک پروژه جدید با پیکربندی مشابه ایجاد کنید و تست کنید که آیا همان مشکل رخ می دهد یا خیر. این کار می تواند به شناسایی اینکه آیا مشکل از پیکربندی پروژه است یا خیر کمک کند.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : hamid_b 05:19 1400/03/16

سلام. در آیدنتیتی یک سری جداول و فیلدها به صورت ثابت وجود داره که پیش فرض خود Identity هستن. حالا اگر شما این پیش فرض ها رو تغییر بدید ممکنه برخی تنظیمات به هم بخوره. به عنوان مثال در جدول AspNetUsers فیلد Id کلید اصلی هست. اگر شما نام این جدول یا نام این ستون رو تغییر بدید تنظیمات پیش فرض خراب میشه. بنابراین باید خودتون به صورت دستی بهش بگید که برای Id یک مقدار رو Generate کنه.

 

در کلاس ApplicationDbContext

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<ApplicationUsers>(entity =>
    {
        entity.ToTable(name: "Users_Tbl");
        entity.Property(e => e.Id).HasColumnName("UserID");
        entity.Property(e => e.Id).ValueGeneratedOnAdd();    
    });
}

 

در کد بالا نام جدول AspNetUsers رو به Users_Tbl و نام فیلد Id رو به UserID تغییر دادیم. در خط بعدی هم گفتیم برای Id که الان UserID هست یک مقدار موقع اضافه شدن یک رکورد جدید ایجاد کن.

به این پاسخ امتیاز بدهید    1
امتیاز: 518 رتبه: 4
1 نظر
ahmadikia : سلام پاسخ شما بسیار عالی بود اشکال من هم رفع شد

امتیاز کاربر : 13   رتبه کاربر : 55   تاریخ ثبت : 09:07 1401/03/13
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود